
"""
1、自定义存储系统必须是以下的子类 django.core.files.storage.Storage:
2、django必须能够在没有任何参数的情况下 实例化您的存储系统
    这意味着任何设置都应该来自 django.conf.sttings
3、您的存储系统必须实现_open()和_save()方法
    以及适用于您的存储类的任何其他方法
4、您的存储类必须是可解构的，以便在迁移中的字段上使用时可以对其进行序列化
    只要您的字段具有可自行序列化的参数 就 可以使用
    django.utils.deconstruct.deconstructible类装饰器
"""

from django.core.files.storage import Storage
from django.conf import settings
from fdfs_client.client import Fdfs_client
from django.utils.deconstruct import deconstructible

@deconstructible
class MyStorage(Storage):
    # 因为我们的Fdfs是通过浏览器来获取资源的
    #所以我们不需要打开
    def _open(self, name, mode='rb'):
        pass

    #save 保存资源
    #自定义save方法 把图片保存到 Fdfs 服务器上
    def _save(self, name, content, max_length=None):

        #1、创建客户端，加载配置文件
        client = Fdfs_client('utils/fdfs/client.conf')
        #2、获取图片资源
        data = content.read()
        #3、上传
        result = client.upload_by_buffer(data)
        #4、根据上传的状态来获取 remote file_id
        if result.get('status') == 'Upload successed.':
            return result.get('Remote file_id')

    #返回图片是否存在
    def exists(self, name):
        return False

    def url(self, name):
        return 'http://192.168.18.27:8888/' + name

s = MyStorage()


class Person(object):
    pass

p = Person()


class Man(object):

    def __init__(self,name):
        self.name=name

#必须要传一个name
m = Man(name='itcast')


class Woman(object):

    def __init__(self,name=None):
        self.name=name

w = Woman()















































